package demo0;

public class Main {
    public static void main(String[] args) {
        Proxy proxy = new Proxy();
        proxy.Request();

    }
}

abstract class  Subject{
    public abstract void Request();
}

//RealSubject类 用于定义Proxy所代表的真实实体
class RealSubject extends Subject{
    @Override
    public void Request() {
        System.out.println("真实的请求！");
    }
}

//Proxy类 保存一个引用使得代理可以访问实体，并提供一个与Subject 的接口相同的接口，这样代理就可以用替代实体
class Proxy extends Subject{
    RealSubject realSubject;
    @Override
    public void Request() {
        if(realSubject == null){
            realSubject = new RealSubject();
        }
        realSubject.Request();
    }
}